package com.ftf.tp.user.application.adapter.producer;

import com.ftf.tp.common.domain.BaseDomainEvent;

/**
 * 领域事件发布接口
 *
 * @author tanghao
 */
public interface DomainEventPublisher {

    /**
     * 发布事件 到微服务内部
     *
     * @param event event
     */
    <EVENT extends BaseDomainEvent<?>> void publishInternal(EVENT event);

    /**
     * 发布事件 - 到微服务外部 - 同步
     *
     * @param event event
     * @param topic topic
     */
    <EVENT extends BaseDomainEvent<?>> void publishExternalSync(EVENT event, String topic);

    /**
     * 发布事件并保存
     *
     * @param event event
     */
    <EVENT extends BaseDomainEvent<?>> void publishAndSave(EVENT event);

}
